/**
 * 
 */
package rer.persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import rer.model.TipoFuncionario;
import rer.util.ConexaoJDBC_mysql;

/**
 * 
 * @author Henrique Serrat
 * @since 15/11/2014
 *
 */

public class TipoFuncionarioDAO implements ITipoFuncionarioDAO {
	
	
	private Statement statement;
	private PreparedStatement preparedStatement;
	private ResultSet resultSet;
	private String query;
	private TipoFuncionario tipoFuncionario;
	private List<TipoFuncionario> tiposFuncionarios;
	private Connection conexao = ConexaoJDBC_mysql.getConnection();
	

	/* (non-Javadoc)
	 * @see rer.persistencia.ITipoFuncionarioDAO#cadastrar(rer.model.TipoFuncionario)
	 */
	@Override
	public Boolean cadastrar(TipoFuncionario tipoFuncionario) {
		// TODO Auto-generated method stub
		
try {
			
			query ="INSERT INTO `tipofuncionario`(`tipo`) VALUES ?";
			
			preparedStatement = conexao.prepareStatement(query);
			
			preparedStatement.setString(1, tipoFuncionario.getTipo());
			
			return true;
			
		} catch (SQLException e) {
			// TODO: handle exception
			
			System.out.println(e.getMessage());
		}finally{
			try {
				System.out.println("Aqui?");
				preparedStatement.close();
				
			} catch (SQLException e) {
				// TODO: handle exception
				e.printStackTrace();
				
			}
			System.out.println("Finally");
		}
		
		return false;
		
	}

	/* (non-Javadoc)
	 * @see rer.persistencia.ITipoFuncionarioDAO#editar(int)
	 */
	@Override
	public Boolean editar(TipoFuncionario tipoFuncionario) {
		// TODO Auto-generated method stub
		try{
			query = "UPDATE `db_ceirr`.`tipofuncionario` SET `id` = '?'"
					+ " WHERE `tipofuncionario`.`tipo` = '?';";
			
			preparedStatement = conexao.prepareStatement(query);
			
			preparedStatement.setInt(1, tipoFuncionario.getId());
			preparedStatement.setString(2,tipoFuncionario.getTipo());
			
			preparedStatement.executeUpdate();
			
			
			
			System.out.println("Tipo funcionario alterados com sucesso - DAO");
			return true;

		}catch(SQLException erro){
			System.out.println(erro.getMessage());
		}
		
		return false;
	}
	

	/* (non-Javadoc)
	 * @see rer.persistencia.ITipoFuncionarioDAO#deletar(int)
	 */
	@Override
	public Boolean deletar(int id) {
		// TODO Auto-generated method stub
		
		try {
			
			query ="DELETE FROM `db_ceirr`.`tipofuncionario` "
					+ "WHERE `tipofuncionario`.`id` = '?'";
			
			
			preparedStatement = conexao.prepareStatement(query);
			
			preparedStatement.setInt(1, id);
			
			preparedStatement.executeUpdate();
			
			System.out.println("Tipo de Funcionario apagado com sucesso!");
			return true;
			
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
		return false;
	}

	/* (non-Javadoc)
	 * @see rer.persistencia.ITipoFuncionarioDAO#listar()
	 */
	@Override
	public List<TipoFuncionario> listar() {
		// TODO Auto-generated method stub
		
		tiposFuncionarios = null;
		
		try {
			
			query = "SELECT * FROM `tipofuncionario` ";
			
			statement = conexao.createStatement();
			resultSet = statement.executeQuery(query);
			
			tiposFuncionarios = new ArrayList<TipoFuncionario>();
			
			while(resultSet.next()){
				tipoFuncionario = new TipoFuncionario();
				tipoFuncionario.setId(resultSet.getInt("id"));
				tipoFuncionario.setTipo(resultSet.getString("tipo"));
				
				tiposFuncionarios.add(tipoFuncionario);
				//System.out.println("\nTipo Funcionario " + resultSet.getString("tipo"));
			}
			
		}catch(SQLException erro){
			System.out.println(erro.getMessage());
		}
		
		try {
			statement.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("\n Erro ao fechar o objeto preparedStatement.");
		}
		System.out.println("\nSucesso pesquisa Tipo Funcionario ");
		
		return tiposFuncionarios;
	}

	@Override
	public TipoFuncionario pesquisaTipoFuncionario(int id) {
		// TODO Auto-generated method stub
		
		tipoFuncionario = null;
		
		try {
			
				query = "SELECT * FROM tipofuncionario WHERE tipofuncionario.id = ?";
				
				preparedStatement = conexao.prepareStatement(query);

				preparedStatement.setInt(1, id);

				resultSet = preparedStatement.executeQuery();

				
				if(resultSet.next()){
					
					tipoFuncionario = new TipoFuncionario();
					tipoFuncionario.setTipo(resultSet.getString("tipo"));
				}
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
			}
			
			try {
				preparedStatement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("\n Erro ao fechar o objeto preparedStatement.");
			}
			System.out.println("\nSucesso pesquisa Tipo Funcionario");
		
		return tipoFuncionario;
	}

	
	
}
